home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-09-21 | 4.9 KB | 266 lines | [TEXT/MPS ] |
- ****************************************************************
- * *
- * buildapp.system hub. *
- * *
- * Apple II 8-bit application builder and launcher. *
- * Copyright (C) 1990 Apple Computer. *
- * Version 4.1 *
- * *
- * Written by Eric Soldan, Apple II DTS *
- * *
- ****************************************************************
-
- case on
- longi off
- longa off
- machine m6502
-
- * asmiigs dispatch.a -o :o:dispatch.obj
- * linkiigs -x :o:dispatch.obj -o :o:dispatch.lnk
- * makebiniigs :o:dispatch.lnk -o :o:dispatch.bin -org $2000
- * duplicateiigs -y -mac :o:dispatch.bin :
-
- *** (mode bit assignments) **
-
- * bit 0 = 0: User wants ROM active
- * bit 0 = 1: User wants a language card active
-
- * bit 1 = 0: Primary zero-page and language card (if bit 0 says language card)
- * bit 1 = 1: Auxiliary zero-page and language card (if bit 0 says language card)
-
- * bit 2 = 0: Primary $D000 bank of language card (if bit 0 says language card)
- * bit 2 = 1: Auxiliary $D000 bank of language card (if bit 0 says language card)
-
- * bit 3 = 0: Primary 48k
- * bit 3 = 1: Auxiliary 48k
-
- * bit 4 = 0: Initialize aux stack pointer (stored at $101) to $FF
- * bit 4 = 1: Leave aux stack pointer alone (already set up).
-
- * bit 7 = 0: Mode byte is for a segment.
- * bit 7 = 1: Mode byte is for launching.
-
- *****************************
-
- mode equ $62
- dest equ $63 ;& $64
- len equ $65 ;& $66
- ptr equ $9D ;& $9E
- objlen equ $9F ;& $A0
-
- off equ 0
- on equ 1
-
- store80 equ $C000 ;sta
- ramrd equ $C002 ;sta
- ramrdsw equ $C013 ;hi=1, aux48
- ramwrt equ $C004 ;sta
- ramwrtsw equ $C014 ;hi=1, aux48
- altzp equ $C008 ;sta
- rdaltzp equ $C016
- pri equ $C054 ;page1
- aux equ $C055 ;page2
-
-
- * second read from switch does writing.
- rdlans equ $C080 ;read lan-card, sec-$d0 bank,
- * ;write rom (lan-card protect)
- wrlans equ $C081 ;write lan-card, sec-$D0
- * ;bank, read rom.
- romsel equ $C082 ;read/write rom.
- rdwrlans equ $C083 ;read/write lan-card,
- * ;sec-$D0 bank.
- * $C084-$C087 duplicates of above.
- rdlanp equ rdlans+8 ;pri-$D0 bank.
- wrlanp equ wrlans+8 ;pri-$D0 bank.
- rdwrlanp equ rdwrlans+8 ;pri-$D0 bank.
-
-
- *************************
-
- start PROC
-
- jmp start0
- dc.b $EE,$EE
- dc.b 65
- dc.b 13,'BUILDAPP.TEXT'
- ds.b 65-14
-
- dc.w end
-
- start0 lda end ;First mode byte.
- and #16
- bne @a
-
- php ;Disable interrupts.
- sei
-
- sta altzp+on ;Initialize aux stack pointer.
- ldx #$FF
- stx $101
- tsx ;Store current stack pointer.
- inx ;Adjust for php.
- stx $100
- sta altzp+off ;Back to primary ram.
-
- plp ;Restore interrupt status.
-
- @a clc
- jsr selectzp
-
- bit wrlans
- bit wrlans ;Read rom/write ram.
- sta ramrd+off
- sta ramwrt+off
-
- ldy #<end
- lda #>end
-
- movefilez sty ptr
- sta ptr+1
-
- movefile sta $C004 ;Read pri48.
- ldy #4
- @m lda (ptr),y
- sta |mode,y
- dey
- bpl @m
-
- jsr selbank
- lda mode
- bpl mfile
- jmpaddr jmp (dest) ;Start it.
-
- mfile equ *
- lda ptr
- clc
- adc #5
- sta ptr
- bcc @a
- inc ptr+1
-
- @a ldy #0
- ldx len ;So dec test works.
- inx
- @b dex
- bne @c
- dec len+1
- bmi @d
- @c lda (ptr),y
- sta (dest),y
- iny
- bne @b
- inc ptr+1
- inc dest+1
- bne @b
- @d tya
- clc
- adc ptr
- sta ptr
- bcc @e
- inc ptr+1
-
- @e bit mode ;See if this segment is an initial segment.
- bvc movefile ;It isn't, so go move next file.
-
- lda ptr+1 ;Save the really important 0-page.
- pha
- lda ptr
- pha
- jsr jmpaddr ;Call the initial segment.
- pla
- tay
- pla
- jmp movefilez ;Keep going.
-
- *************************
-
- selbank bit romsel
- lda mode
- lsr a
- bcc @a ;User wants rom selected.
- lsr a
- jsr selectzp ;Select which 0page.
- bit rdwrlans ;Read/write lan, sec $D0.
- bit rdwrlans
- lda mode
- and #4
- beq @a
- bit rdwrlanp ;Read/write lan, pri $D0
- bit rdwrlanp
- @a lda mode ;Select pri or aux 48k.
- and #8
- beq @b
- sta $C005 ;Write aux48.
- @b rts
-
- *************************
-
- selectzp ror a ;cclear=pri / cset=alt
- eor rdaltzp
- bpl @rts ;already have correct 0page.
-
- ldy #4 ;Save the 0page we need.
- @a lda mode,y
- sta @mode,y
- lda ptr,y
- sta @ptr,y
- dey
- bpl @a
-
- pla ;First, save the return address, since
- sta @retaddr ;it will end up on the wrong stack, and
- pla ;therefore we would not be able to return.
- sta @retaddr+1
-
- php ;Switch which stack is being used.
- pla
- sta @intstat
-
- tsx ;What is that darned stack pointer anyway?
- asl rdaltzp ;Which 0page are we on currently?
-
- sei ;Now we are getting serious.
- sta altzp+on
- bcc @b ;We were in pri-mem before.
-
- stx $101 ;Save the current aux stack pointer, since
- ldx $100 ;we will be changing to pri-mem. Then
- sta altzp+off ;choose primary ram.
- bcs @c
-
- @b stx $100
- ldx $101
-
- @c txs ;Set the stack pointer
- lda @intstat
- pha
- plp ;Now we can lighten up.
-
- lda @retaddr+1 ;Show the way home.
- pha
- lda @retaddr
- pha
-
- ldy #4 ;Save the 0page we need.
- lda @mode,y
- sta mode,y
- lda @ptr,y
- sta ptr,y
- dey
- bpl @c
-
- @rts rts
-
- @mode ds.b 5
- @ptr ds.b 5
- @retaddr ds.b 2
- @intstat ds.b 1
-
- end equ *
-
- endp
-
- END
-
-